## Задача 1 На вход программе подается натуральное число N. 

Объявите в программе функцию-генератор с именем `get_sum` с сигнатурой:

```python
def get_sum(total): ...
```

которая бы возвращала текущую сумму чисел последовательности длины total = N в диапазоне целых чисел [1; N] (включительно). 

То есть, при вызове get_sum в качестве аргумента передается переменная N. 

В результате должны получить следующие результаты работы функции-генератора:

* при первом вызове get_sum возвращает сумму 1;
* при втором вызове get_sum возвращает сумму чисел 1+2 = 3;
* при третьем вызове get_sum возвращает сумму чисел 1+2+3 = 6;

## Задача 2 Реализовать функцию-генератор последовательности Фибонначи

так, на вход программе поступает натуральное число N (N > 5). 
Затем (или в начале программы), объявить функцию-генератор с сигнатурой:

```python
def balak_seq(max_len): ...
```
которая бы возвращала `max_len = N` первых чисел последовательности `Фибонначи` (включая первые две единицы)


## Задача 3

Необходимо определить функцию-генератор, которая бы выдавала пароль длиной N символов из случайных букв, цифр и некоторых других знаков. 

Для получения последовательности допустимых символов для генерации паролей в программе импортированы две строки: 

```python
ascii_lowercase, ascii_uppercase 
# на основе которых формируется общий список:

from string import ascii_lowercase, ascii_uppercase
chars = ascii_lowercase + ascii_uppercase + "0123456789!?@#$*"

```

Функция-генератор должна при каждом вызове возвращать новый пароль из случайно выбранных символов chars длиной N и делать это бесконечно, то есть, вызывать ее можно бесконечное число раз. 

Сгенерируйте с помощью этой функции первые пять паролей и выведите их в столбик (каждый с новой строки).

```
riGp?58WAm
!dX3a5IDnO
dcdbWB2d*C
4?DSDC6Lc1
mxLpQ@2@yM
```


## Задача 3
задайте функцию-генератор, которая бы возвращала случайно сформированные email-адреса с доменом mail.ru и длиной в N символов, используя буквы из ascii_lowercase и ascii_uppercase

Например, при N=6, получим адрес: SCrUZo@mail.ru

Функция-генератор должна возвращать бесконечное число таких адресов, то есть, генерировать постоянно. 

Выведите первые пять сгенерированных email и выведите их в столбик (каждый с новой строки).

> Ввод - 8

> Вывод:
```
ESZYCIDP@mail.ru
YOPUMZGD@mail.ru
PAMNTYYA@mail.ru
WOIXZHSD@mail.ru
KAAAURAM@mail.ru
```


### Задача 3 Теорема Вильсона

Теорема теории чисел, которая утверждает, что p — простое число тогда и только тогда, когда (p − 1)! + 1 делится на p

```python
def prime(n):
    if (math.factorial(n-1)+1) % n!=0:
        print ("Это составное число")
    else:
        print ("Это простое число")
```


```python
def primFerma(a,n):
    if a**(n-1)%n==1:
        print "правдоподобно простое"
    else:
        print "составное"
```

### Задача 4

Создайте функцию `infinite(lst, tries)`, которая будет проходиться по элементам списка lst (целые числа) заданное количество раз (`tries`) циклически. 
Один раз - один элемент списка. 
После вывода последнего значения последовательности процедура начнется с самого начала.

Например, если в списке 2 элемента, а функция получила значение 3, то сначала выведется первый объект, потом последний, а потом опять первый. 
Результат работы функции представьте в виде строки, состоящей из tries количества символов.

### Задача 5

Реализуйте итератор колоды карт (52 штуки) CardDeck. Каждая карта представлена в виде строки типа «2 Пик». При вызове функции next() будет представлена следующая карта. По окончании перебора всех элементов возникнет ошибка StopIteration.

> Результат выполнения
```
2 Пик
3 Пик
4 Пик
…
K Крестей
A Крестей
StopIteration
```